/*
 *******************************************************************************
 * @ProjectName 中国航信  DIT(国际运价前端管理系统)
 * @FileName	TimerThread.java
 * @package		com.travelsky.server.chat_socket
 * @author		HuangFeng
 * @Date		2017年10月13日 下午12:17:23
 * @version		1.0
 * @Company		中国民航信息网络股份有限公司
 * @Copyright	Copyright (c) 2016
 * @description 
 *******************************************************************************
 */
package com.travelsky.server.chat_socket;

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 定时任务线程类
 ******************************************
 * @author HuangFeng  [2017年10月13日 下午12:17:23]
 * @version 1.0
 ******************************************
 */
public class TimerManager {
	
	/**
	 * 时间间隔一天
	 */
    private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;  
	private ServerThread serverThread; // 服务器端线程
	private Timer timer;
	
	/**
	 * 默认构造方法
	 ******************************************
	 * @author HuangFeng [2017年10月13日 下午12:19:38]
	 * @version 1.0
	 ******************************************
	 */
	public TimerManager(){
	}
	
	/**
	 * 构造方法
	 ******************************************
	 * @author HuangFeng [2017年10月13日 下午12:19:48]
	 * @version 1.0
	 ******************************************
	 * @param serverThread
	 */
	public TimerManager(ServerThread serverThread){
		this.serverThread = serverThread;
		timer = new Timer();
		cronJob(9, 3, 30, new MeetingTimeTask(this.serverThread));
		cronJob(11, 18, 30, new MeetingTimeTask(this.serverThread));
		cronJob(14, 58, 30, new MeetingTimeTask(this.serverThread));
	}
	
	/**
	 * 添加定时任务
	 ******************************************
	 * @author HuangFeng [2017年10月13日 下午12:58:17]
	 * @version 1.0
	 ******************************************
	 * @param shi 时 
	 * @param fen 分
	 * @param miao 秒
	 * @param task 任务
	 */
	public void cronJob(int shi, int fen, int miao ,TimerTask task) {
		Calendar cal = Calendar.getInstance();  
        // 每天定点执行  
        cal.set(Calendar.HOUR_OF_DAY, shi);  
        cal.set(Calendar.MINUTE, fen);  
        cal.set(Calendar.SECOND, miao);  
        Date date=cal.getTime(); //第一次执行定时任务的时间
        //如果第一次执行定时任务的时间 小于 当前的时间  +1天
        if (date.before(new Date())) {  
            date = this.addDay(date, 1);  
        }
        timer.schedule(task,date,PERIOD_DAY);  
	}
	
	/**
	 * 增加或减少天数  
	 ******************************************
	 * @author HuangFeng [2017年10月13日 下午12:45:16]
	 * @version 1.0
	 ******************************************
	 * @param date 时间
	 * @param num 数量
	 * @return 结果
	 */
    public Date addDay(Date date, int num) {  
    	Calendar startDT = Calendar.getInstance();  
	    startDT.setTime(date);  
	    startDT.add(Calendar.DAY_OF_MONTH, num);  
	    return startDT.getTime();  
    }  
	
	/**
	 * 停止定时任务
	 ******************************************
	 * @author HuangFeng [2017年10月13日 下午12:24:46]
	 * @version 1.0
	 ******************************************
	 */
	public void stopTimerManager() {
		timer.cancel();
	}
	
}
